package br.com.documentos.model.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.documentos.model.entity.ParametroDocumentoUsuario;
import br.com.documentos.model.entity.TipoDocumentoPadrao;
import br.com.documentos.model.entity.TipoDocumentoUsuario;
import br.com.documentos.model.entity.Usuario;
import br.com.documentos.model.persistence.TipoDocumentoPadraoRepository;
import br.com.documentos.model.persistence.TipoDocumentoUsuarioRepository;

@Service
@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
public class TipoDocumentoService {

	@Autowired
	private TipoDocumentoPadraoRepository tipoDocumentoPadraoRepository;
	
	@Autowired
	private TipoDocumentoUsuarioRepository tipoDocumentoUsuarioRepository; 

	public void salvarTipoDocumentoUsuario( TipoDocumentoUsuario tipoDocumentoUsuario ){
		tipoDocumentoUsuarioRepository.save(tipoDocumentoUsuario);
	}
	
	public void preencheTiposPadraoParaNovoUsuario( Usuario usuario ){
		
		List<TipoDocumentoPadrao> tipoPadroes = tipoDocumentoPadraoRepository.buscarTiposDocumentoAtivos();
		
		for( TipoDocumentoPadrao tipo : tipoPadroes ){
			
			TipoDocumentoUsuario tipoDocumentoUsuario = new TipoDocumentoUsuario(tipo);
			tipoDocumentoUsuario.setUsuario(usuario);
			
			tipoDocumentoUsuarioRepository.save(tipoDocumentoUsuario);
		}
	}
	
	public List<TipoDocumentoUsuario> buscarTiposDocumentoPorUsuario( long idUsuario ){
		return tipoDocumentoUsuarioRepository.listarTiposDocumentoPorUsuario(idUsuario);
	}
	
	public TipoDocumentoUsuario carregarTipoDocumentoPorId( long idTipoDocumento ){
		return tipoDocumentoUsuarioRepository.load(idTipoDocumento);
	}
	
	public List<ParametroDocumentoUsuario> buscarParametrosPorIdTipoDocumento( long idTipoDocumento ){
		TipoDocumentoUsuario tipoDocumento = tipoDocumentoUsuarioRepository.load(idTipoDocumento);
		
		if( tipoDocumento != null ){
			return tipoDocumento.getParametros();
		}
				
		return new ArrayList<ParametroDocumentoUsuario>();
	}
	
}
